"""
比如我们有一个函数f(x)=x2，要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上，
就可以用map()实现

"""


# way01
def f(x):
    return x ** 3


"""
    map(func, *iterables) --> map object

    Make an iterator that computes the function using arguments from
    each of the iterables.  Stops when the shortest iterable is exhausted.
"""
r = map(f, list(range(1, 11)))

print(r)
print(list(r))

l = list(map(str, list(range(1, 11))))
print(l)

"""
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上，
这个函数必须接收两个参数，reduce把结果继续和序列的下一个
元素做累积计算，其效果就是：

reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)

比方说对一个序列求和，就可以用reduce实现


"""

print('*' * 50)

from functools import reduce


def add(x, y):
    return x + y


result = reduce(add, [1, 3, 5, 7, 9])

print(result)
